import json
from network.PacketInfo import PacketInfo


def 备份数据(数据结构, 文件名):
    with open(文件名, "w") as 文件:
        json.dump(数据结构, 文件)


def 恢复数据(文件名):
    with open(文件名, "r") as 文件:
        return json.load(文件)


def 获取包序列标记():
    return "#时间戳\t源地址\t目标地址\t协议类型\t源端口号\t目标端口号\t长度\n"


def 读取包序列(文件名, 数据包数=-1, 持续时间=-1):
    包序列 = []
    with open(文件名, "r") as 文件:
        行 = 文件.readline()
        if 行 != 获取包序列标记():
            raise SystemExit("您的文件为:%s, 但是这个文件不是一个合法的符戳文件." % 文件名)
        行 = 文件.readline()
        while "" != 行:
            数据包 = PacketInfo(行)
            包序列.append(数据包)
            if (数据包数 > 0) and len(包序列) >= 数据包数:
                break
            elif (持续时间 > 0) and (数据包.ts - 包序列[0].ts >= 持续时间):
                break
            行 = 文件.readline()
    return 包序列


def 存储包序列(标识符序列, 时间戳序列, 文件名):
    with open(文件名, "w") as 文件:
        文件.write(获取包序列标记())
        for 标识符, 时间戳 in zip(标识符序列, 时间戳序列):
            文件.write("%s\t%f\n" % (标识符, 时间戳))
